package com.sunrise.estoque.bean;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import javax.annotation.Resource;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.ComponentSystemEvent;

import lombok.Getter;

import org.springframework.stereotype.Controller;

import com.sunrise.estoque.servico.ManterProdutoService;
import com.sunrise.estoque.visao.ProdutoForm;
import com.sunrise.generico.bean.ManterBean;
import com.sunrise.generico.entidade.Cofins;
import com.sunrise.generico.entidade.Colecao;
import com.sunrise.generico.entidade.Cor;
import com.sunrise.generico.entidade.ICMS;
import com.sunrise.generico.entidade.IPI;
import com.sunrise.generico.entidade.Linha;
import com.sunrise.generico.entidade.Marca;
import com.sunrise.generico.entidade.PIS;
import com.sunrise.generico.entidade.Produto;
import com.sunrise.generico.entidade.Setor;
import com.sunrise.generico.entidade.SituacaoTributaria;
import com.sunrise.generico.entidade.Tamanho;
import com.sunrise.generico.entidade.Unidade;
import com.sunrise.generico.entidade.iface.EntidadeManter;
import com.sunrise.generico.enums.TipoImposto;
import com.sunrise.generico.enums.TipoStatus;
import com.sunrise.generico.to.CamposCofins;
import com.sunrise.generico.to.CamposICMS;
import com.sunrise.generico.to.CamposIPI;
import com.sunrise.generico.to.CamposPIS;
import com.sunrise.generico.util.MatematicaUtil;
import com.sunrise.generico.util.MessagesUtil;
import com.sunrise.generico.visao.Filtro;

@ManagedBean
@ViewScoped
@Controller
public class ManterProdutoBean extends ManterBean<Produto> {

	@Resource
	@Getter
	private ManterProdutoService produtoService;

	@Resource
	@Getter
	private ManterMovimentacaoEstoqueBean movimentacaoEstoqueBean;

	@Resource
	@Getter
	private ProdutoForm formulario;

	@Override
	public void inicializarEntidade() {
		ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
		setStatus(Arrays.asList(TipoStatus.values()));
		setEntidade(new Produto());
		setFiltro(new Filtro());
		getFiltro().setAtivo(getStatus().iterator().next());
		getEntidade().setAtivo(Boolean.TRUE);

		if (context.isUserInRole("MANTER_ICMS")) {
			getEntidade().setIcms(new ICMS());
		}

		if (context.isUserInRole("MANTER_COFINS")) {
			getEntidade().setCofins(new Cofins());
		}

		if (context.isUserInRole("MANTER_IPI")) {
			getEntidade().setIpi(new IPI());
		}

		if (context.isUserInRole("MANTER_PIS")) {
			getEntidade().setPis(new PIS());
		}

		if (context.isUserInRole("MANTER_COLECAO")) {
			getEntidade().setColecao(new Colecao());
		}

		if (context.isUserInRole("MANTER_COR")) {
			getEntidade().setCor(new Cor());
		}

		if (context.isUserInRole("MANTER_LINHA")) {
			getEntidade().setLinha(new Linha());
		}

		if (context.isUserInRole("MANTER_MARCA")) {
			getEntidade().setMarca(new Marca());
		}

		if (context.isUserInRole("MANTER_SETOR")) {
			getEntidade().setSetor(new Setor());
		}

		if (context.isUserInRole("MANTER_TAMANHO")) {
			getEntidade().setTamanho(new Tamanho());
		}
		if (context.isUserInRole("MANTER_UNIDADE")) {
			getEntidade().setUnidade(new Unidade());
		}
	}

	@Override
	public List<Produto> iniciarlizarListEntidade() {
		return new ArrayList<Produto>();
	}

	@Override
	public void preRenderNew(ComponentSystemEvent event) {
		if (getEntidade() == null) {
			inicializarEntidade();
		}
		carregarFormulario();
		carregarImpostos();
	}

	public void carregarProdutoCadastro() {
		inicializarEntidade();
		getProdutoService().carregarProdutoEntrada(getMovimentacaoEstoqueBean().getFormulario().getMpSelecionado(),
				getEntidade());
		carregarFormulario();
	}

	private void carregarImpostos() {
		if (getEntidade().getIcms() == null) {
			getEntidade().setIcms(new ICMS());
		}

		if (getEntidade().getIpi() == null) {
			getEntidade().setIpi(new IPI());
		}

		if (getEntidade().getPis() == null) {
			getEntidade().setPis(new PIS());
		}

		if (getEntidade().getCofins() == null) {
			getEntidade().setCofins(new Cofins());
		}

		SituacaoTributaria situacaoTributaria = getProdutoService().buscarSituacaoPadrao(TipoImposto.ICMS);
		if (situacaoTributaria == null) {
			getEntidade().getIcms().setSituacaoTributaria(new SituacaoTributaria());
		} else {
			getEntidade().getIcms().setSituacaoTributaria(situacaoTributaria);
		}

		situacaoTributaria = getProdutoService().buscarSituacaoPadrao(TipoImposto.PIS);
		if (situacaoTributaria == null) {
			getEntidade().getPis().setSituacaoTributaria(new SituacaoTributaria());
		} else {
			getEntidade().getPis().setSituacaoTributaria(situacaoTributaria);
		}

		situacaoTributaria = getProdutoService().buscarSituacaoPadrao(TipoImposto.IPI);
		if (situacaoTributaria == null) {
			getEntidade().getIpi().setSituacaoTributaria(new SituacaoTributaria());
		} else {
			getEntidade().getIpi().setSituacaoTributaria(situacaoTributaria);
		}

		situacaoTributaria = getProdutoService().buscarSituacaoPadrao(TipoImposto.COFINS);
		if (situacaoTributaria == null) {
			getEntidade().getCofins().setSituacaoTributaria(new SituacaoTributaria());
		} else {
			getEntidade().getCofins().setSituacaoTributaria(situacaoTributaria);
		}
		carregarCamposICMS();
		carregarCamposPIS();
		carregarCamposIPI();
		carregarCamposCofins();
	}

	private void carregarFormulario() {
		getProdutoService().carregarFormulario(getFormulario());
	}

	public List<Colecao> carregarColecoes(String nome) {
		return getProdutoService().carregarColecoes(nome);
	}

	public List<Tamanho> carregarTamanhos(String nome) {
		return getProdutoService().carregarTamanhos(nome);
	}

	public List<Linha> carregarLinhas(String nome) {
		return getProdutoService().carregarLinhas(nome);
	}

	public List<Unidade> carregarUnidades(String nome) {
		return getProdutoService().carregarUnidades(nome);
	}

	public List<Setor> carregarSetores(String nome) {
		return getProdutoService().carregarSetores(nome);
	}

	public List<Cor> carregarCores(String nome) {
		return getProdutoService().carregarCores(nome);
	}

	public List<Marca> carregarMarcas(String nome) {
		return getProdutoService().carregarMarcas(nome);
	}

	@Override
	public void preRenderEdit(ComponentSystemEvent event) {
		carregarFormulario();
		carregarCamposICMS();
		carregarCamposPIS();
		carregarCamposIPI();
		carregarCamposCofins();
	}

	public void validarMarca() {
		if (getEntidade().getMarca() != null && getEntidade().getMarca().getNome() != null) {
			Marca marca = getProdutoService().buscarMarcaPorNome(getEntidade().getMarca().getNome());
			if (marca == null) {
				MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("criarMarcaInvalida"));
			}
		}
	}

	public void validarSetor() {
		if (getEntidade().getSetor() != null && getEntidade().getSetor().getNome() != null) {
			Setor setor = getProdutoService().buscarSetorPorNome(getEntidade().getSetor().getNome());
			if (setor == null) {
				MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("criarSetorInvalida"));
			}
		}
	}

	public void validarLinha() {
		if (getEntidade().getLinha() != null && getEntidade().getLinha().getNome() != null) {
			Linha linha = getProdutoService().buscarLinhaPorNome(getEntidade().getLinha().getNome());
			if (linha == null) {
				MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("criarLinhaInvalida"));
			}
		}
	}

	public void validarCor() {
		if (getEntidade().getCor() != null && getEntidade().getCor().getNome() != null) {
			Cor cor = getProdutoService().buscarCorPorNome(getEntidade().getCor().getNome());
			if (cor == null) {
				MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("criarCorInvalida"));
			}
		}
	}

	public void validarTamanho() {
		if (getEntidade().getTamanho() != null && getEntidade().getTamanho().getNome() != null) {
			Tamanho tamanho = getProdutoService().buscarTamanhoPorNome(getEntidade().getTamanho().getNome());
			if (tamanho == null) {
				MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("criarTamanhoInvalida"));
			}
		}
	}

	public void validarUnidade() {
		if (getEntidade().getUnidade() != null && getEntidade().getUnidade().getNome() != null) {
			Unidade unidade = getProdutoService().buscarUnidadePorNome(getEntidade().getUnidade().getNome());
			if (unidade == null) {
				MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("criarUnidadeInvalida"));
			}
		}
	}

	public void validarColecao() {
		if (getEntidade().getColecao() != null && getEntidade().getColecao().getNome() != null) {
			Colecao colecao = getProdutoService().buscarColecaoPorNome(getEntidade().getColecao().getNome());
			if (colecao == null) {
				MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("criarColecaoInvalida"));
			}
		}
	}

	public void validarLucroPercentual() {
		if (getEntidade().getCusto() != null && getEntidade().getPrecoVenda() != null) {
			if (getEntidade().getCusto().compareTo(getEntidade().getPrecoVenda()) == 1) {
				MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("precoCustoMaiorPrecoVenda"));
			} else {
				BigDecimal lucroPercentual = MatematicaUtil.calcularPercentual(getEntidade().getCusto(), getEntidade()
						.getPrecoVenda());
				String percentual = lucroPercentual.toString();
				if (lucroPercentual.scale() > 2) {
					percentual = lucroPercentual.setScale(2, RoundingMode.HALF_DOWN).toString();
				}
				MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("lucroPercentual") + percentual + "%");
			}
		}
	}

	@Override
	public void preRenderList(ComponentSystemEvent event) {
		inicializarEntidade();
		getFormulario().setMarcas(getProdutoService().carregarMarcas(""));
		getFormulario().setFiliais(getProdutoService().listarFiliaisPorUsuario(obterUsuarioLogado()));
		if (getFormulario().getFiliais() != null && !getFormulario().getFiliais().isEmpty()) {
			getFiltro().setIdFilial(getFormulario().getFiliais().iterator().next().getId());
			getFormulario().setProdutos(
					getProdutoService().listarProdutosTO(getFormulario().getFiliais().iterator().next().getId(), getFiltro()));
		}
	}

	@Override
	public String salvar() {
		getProdutoService().salvarProduto(getEntidade());
		buscarPorFiltros();
		return getListar();
	}
	
	@Override
	public String salvarContinuar() {
		getProdutoService().salvarProduto(getEntidade());
		return criarEntidade();
	}

	@Override
	public String alterar() {
		getProdutoService().alterarProduto(getEntidade());
		buscarPorFiltros();
		return getListar();
	}

	public void buscarPorFiltros() {
		getFormulario().setProdutos(getProdutoService().listarProdutosTO(getFiltro().getIdFilial(), getFiltro()));
	}

	public List<String> autoCompleteProdutoPorNome(String nome) {
		Collection<Produto> produtos = getProdutoService().buscarProdutoPorNome(nome);
		List<String> listaEntidades = new ArrayList<String>();
		for (EntidadeManter e : produtos) {
			listaEntidades.add(e.getNome());
		}
		return listaEntidades;
	}

	public void carregarCamposICMS() {
		getFormulario().setCamposIcms(new CamposICMS());

		getFormulario().getCamposIcms().setCST(Boolean.TRUE);
		getFormulario().getCamposIcms().setOrig(Boolean.TRUE);
		if (getEntidade().getIcms() == null) {
			getEntidade().setIcms(new ICMS());
			getEntidade().getIcms().setSituacaoTributaria(new SituacaoTributaria());
		} else if (getEntidade().getIcms() != null && getEntidade().getIcms().getSituacaoTributaria() != null
				&& getEntidade().getIcms().getSituacaoTributaria().getCodigo() != null) {

			if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("00")) {
				getFormulario().getCamposIcms().setModBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMS(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("10")) {
				getFormulario().getCamposIcms().setModBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setModBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPMVAST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMSST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMSST(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("20")) {
				getFormulario().getCamposIcms().setModBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMS(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("30")) {
				getFormulario().getCamposIcms().setModBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPMVAST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMSST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMSST(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("40")) {
				getFormulario().getCamposIcms().setMotDesICMS(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("50")) {
				getFormulario().getCamposIcms().setMotDesICMS(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("51")) {
				getFormulario().getCamposIcms().setModBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMS(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("41")) {
				getFormulario().getCamposIcms().setVBCSTRet(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMSSTRet(Boolean.TRUE);
				getFormulario().getCamposIcms().setMotDesICMS(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("51")) {
				getFormulario().getCamposIcms().setModBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMS(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("60")) {
				getFormulario().getCamposIcms().setVBCSTRet(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMSSTRet(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("70")) {
				getFormulario().getCamposIcms().setModBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setModBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPMVAST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMSST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMSST(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("90")) {
				getFormulario().getCamposIcms().setModBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setModBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPMVAST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMSST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMSST(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("P10")) {
				getFormulario().getCamposIcms().setModBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setModBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPMVAST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMSST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMSST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPerBCOp(Boolean.TRUE);
				getFormulario().getCamposIcms().setUFST(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("P90")) {
				getFormulario().getCamposIcms().setModBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setModBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPMVAST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMSST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMSST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPerBCOp(Boolean.TRUE);
				getFormulario().getCamposIcms().setUFST(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("101")) {
				getFormulario().getCamposIcms().setPCredSN(Boolean.TRUE);

			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("201")) {
				getFormulario().getCamposIcms().setPCredSN(Boolean.TRUE);
				getFormulario().getCamposIcms().setModBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPMVAST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMSST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMSST(Boolean.TRUE);

			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("202")) {
				getFormulario().getCamposIcms().setModBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPMVAST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMSST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMSST(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("203")) {
				getFormulario().getCamposIcms().setModBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPMVAST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMSST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMSST(Boolean.TRUE);
			} else if (getEntidade().getIcms().getSituacaoTributaria().getCodigo().equals("900")) {
				getFormulario().getCamposIcms().setPCredSN(Boolean.TRUE);
				getFormulario().getCamposIcms().setModBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBC(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMS(Boolean.TRUE);
				getFormulario().getCamposIcms().setModBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPMVAST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPRedBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVBCST(Boolean.TRUE);
				getFormulario().getCamposIcms().setPICMSST(Boolean.TRUE);
				getFormulario().getCamposIcms().setVICMSST(Boolean.TRUE);
			}

		}

	}

	public void carregarCamposPIS() {
		getFormulario().setCamposPis(new CamposPIS());
		if (getEntidade().getPis() == null || getEntidade().getPis().getSituacaoTributaria() == null || getEntidade().getPis().getSituacaoTributaria().getCodigo() == null) {
			getEntidade().setPis(new PIS());
			getEntidade().getPis().setSituacaoTributaria(new SituacaoTributaria());
		} else if (getEntidade().getPis() != null && getEntidade().getPis().getSituacaoTributaria() != null
				&& getEntidade().getPis().getSituacaoTributaria().getCodigo() != null) {
			if (getEntidade().getPis().getSituacaoTributaria().getCodigo().equals("01")
					|| getEntidade().getPis().getSituacaoTributaria().getCodigo().equals("02")) {
				getFormulario().getCamposPis().setVBC(Boolean.TRUE);
				getFormulario().getCamposPis().setPPIS(Boolean.TRUE);
				getFormulario().getCamposPis().setVPIS(Boolean.TRUE);
			} else if (getEntidade().getPis().getSituacaoTributaria().equals("03")) {
				getFormulario().getCamposPis().setQBCProd(Boolean.TRUE);
				getFormulario().getCamposPis().setVAliqProd(Boolean.TRUE);
				getFormulario().getCamposPis().setVPIS(Boolean.TRUE);
			} else {
				getFormulario().getCamposPis().setVBC(Boolean.TRUE);
				getFormulario().getCamposPis().setPPIS(Boolean.TRUE);
				getFormulario().getCamposPis().setQBCProd(Boolean.TRUE);
				getFormulario().getCamposPis().setVAliqProd(Boolean.TRUE);
			}
		}
	}

	public void carregarCamposIPI() {
		getFormulario().setCamposIpi(new CamposIPI());
		if (getEntidade().getIpi() == null) {
			getEntidade().setIpi(new IPI());
			getEntidade().getIpi().setSituacaoTributaria(new SituacaoTributaria());
		} else if (getEntidade().getIpi() != null && getEntidade().getIpi().getSituacaoTributaria() != null
				&& getEntidade().getIpi().getSituacaoTributaria().getCodigo() != null) {

			if (getEntidade().getIpi().getSituacaoTributaria().getCodigo().equals("01")
					|| getEntidade().getIpi().getSituacaoTributaria().getCodigo().equals("02")
					|| getEntidade().getIpi().getSituacaoTributaria().getCodigo().equals("03")
					|| getEntidade().getIpi().getSituacaoTributaria().getCodigo().equals("04")
					|| getEntidade().getIpi().getSituacaoTributaria().getCodigo().equals("05")
					|| getEntidade().getIpi().getSituacaoTributaria().getCodigo().equals("51")
					|| getEntidade().getIpi().getSituacaoTributaria().getCodigo().equals("51")
					|| getEntidade().getIpi().getSituacaoTributaria().getCodigo().equals("52")
					|| getEntidade().getIpi().getSituacaoTributaria().getCodigo().equals("53")
					|| getEntidade().getIpi().getSituacaoTributaria().getCodigo().equals("54")
					|| getEntidade().getIpi().getSituacaoTributaria().getCodigo().equals("55")) {
				getFormulario().getCamposIpi().setClEnq(Boolean.TRUE);
				getFormulario().getCamposIpi().setCSelo(Boolean.TRUE);
				getFormulario().getCamposIpi().setQSelo(Boolean.TRUE);
				getFormulario().getCamposIpi().setCnpjProdutor(Boolean.TRUE);

			} else if (getEntidade().getIpi().getSituacaoTributaria().getCodigo().equals("00")
					|| getEntidade().getIpi().getSituacaoTributaria().getCodigo().equals("49")
					|| getEntidade().getIpi().getSituacaoTributaria().getCodigo().equals("50")
					|| getEntidade().getIpi().getSituacaoTributaria().getCodigo().equals("99")) {

				getFormulario().getCamposIpi().setClEnq(Boolean.TRUE);
				getFormulario().getCamposIpi().setCSelo(Boolean.TRUE);
				getFormulario().getCamposIpi().setQSelo(Boolean.TRUE);
				getFormulario().getCamposIpi().setCnpjProdutor(Boolean.TRUE);

				getFormulario().getCamposIpi().setVBC(Boolean.TRUE);
				getFormulario().getCamposIpi().setPIPI(Boolean.TRUE);
				getFormulario().getCamposIpi().setQUnid(Boolean.TRUE);
				getFormulario().getCamposIpi().setVUnid(Boolean.TRUE);
			}

		}
	}

	public String habilitar() {
		try {
			getEntidade().setAtivo(Boolean.TRUE);
			getService().alterar(getEntidade());
			MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("registroHabilitadoSucesso"));
			buscarPorFiltros();
			return getListar();
		} catch (Exception e) {
			MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("registroNaoHabilitado"));
			return null;
		}
	}
	
	public String desabilitar() {
		try {
			getEntidade().setAtivo(Boolean.FALSE);
			getService().alterar(getEntidade());
			MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("registroDesabilitadoSucesso"));
			buscarPorFiltros();
			return getListar();
		} catch (Exception e) {
			MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("registroNaoDesabilitado"));
			return null;
		}
	}
	
	public void carregarCamposCofins() {
		getFormulario().setCamposCofins(new CamposCofins());
		if (getEntidade().getCofins() == null) {
			getEntidade().setCofins(new Cofins());
			getEntidade().getCofins().setSituacaoTributaria(new SituacaoTributaria());

		} else if (getEntidade().getCofins() != null && getEntidade().getCofins().getSituacaoTributaria() != null
				&& getEntidade().getCofins().getSituacaoTributaria().getCodigo() != null) {

			if (getEntidade().getCofins().getSituacaoTributaria().getCodigo().equals("01")
					|| getEntidade().getCofins().getSituacaoTributaria().getCodigo().equals("02")) {
				getFormulario().getCamposCofins().setPCOFINS(Boolean.TRUE);

			} else if (getEntidade().getCofins().getSituacaoTributaria().getCodigo().equals("03")) {
				getFormulario().getCamposCofins().setVAliqProd(Boolean.TRUE);

			} else if (getEntidade().getCofins().getSituacaoTributaria().getCodigo().equals("99")) {
				getFormulario().getCamposCofins().setVAliqProd(Boolean.TRUE);
				getFormulario().getCamposCofins().setPCOFINS(Boolean.TRUE);
			}

		}
	}
}
